// 作业题5：类型断言与自定义类型守卫
// 定义两个接口Cat和Dog：
//
// interface Cat { type: 'cat'; meow(): void }
// interface Dog { type: 'dog'; bark(): void }
//
// 完成以下任务：
// 编写一个自定义类型守卫函数isCat，参数为Cat | Dog，通过检查type属性判断是否为Cat。
// 编写函数makeSound，参数为Cat | Dog：
// 如果是Cat，调用meow()并返回字符串"Cat says meow"。
// 如果是Dog，调用bark()并返回字符串"Dog says bark"。
//
// 测试数据：
// const animal1: Cat = { type: 'cat', meow: () => console.log('meow') };
// const animal2: Dog = { type: 'dog', bark: () => console.log('bark') };
interface Cat { type: "cat"; meow(): void}
interface Dog { type: "dog"; bark(): void}

function isCat(animal: Cat | Dog){
    return animal.type === "cat";
}

function makeSound(animal: Cat | Dog){
    if(isCat(animal)){
        animal.meow();
        return "Cat says meow";
    }
    else{
        animal.bark();
        return "Dog says bark";
    }
}

const animal1: Cat = { type: 'cat', meow: () => console.log('meow') };
const animal2: Dog = { type: 'dog', bark: () => console.log('bark') };

console.log(makeSound(animal1));
console.log(makeSound(animal2));